#ifndef UNIFORH
#define UNIFORH

#include <GL/glew.h>

#include <string>
#include <vector>

#include "bga/system/ConfigDLL.h"

/**
 * \namespace bga
 * \brief API namespace
 */
namespace bga
{


class BOARD_HELL_ENGINE Uniform
{

friend class Program;

public:
    Uniform(const std::string& location, int value);
    Uniform(const std::string& location, float value);
    Uniform(const std::string& location, int value1, int value2);
    Uniform(const std::string& location, float value1, float value2);
    Uniform(const std::string& location, int value1, int value2, int value3);
    Uniform(const std::string& location, float value1, float value2, float value3);
    Uniform(const std::string& location, int value1, int value2, int value3, int value4);
    Uniform(const std::string& location, float value1, float value2, float value3, float value4);
    Uniform(const std::string& location, const float* matrix, unsigned int dimensions);

    void setValue(int value);
    void setValue(float value);
    void setMatrix(const float* matrix, unsigned int dimensions);
    /// TODO to complete

    std::string getName() const;

    ~Uniform();

private:

    /// uniform name in the shader
    std::string location;

    std::vector<int> intList;
    std::vector<float> floatList;
    const float* matrix;

    unsigned int dimension;
};

}

#endif  // UNIFORH

